﻿#pragma once

#include"Common.h"

class ThreadCache
{
public:
	// 申请内存对象 
	void* Allocate(size_t size);

	//释放内存对象
	void Deallocate(void* ptr, size_t size);

	// 从中心缓存获取对象 
	void* FetchFromCentralCache(size_t index, size_t size);

	// 释放对象时，链表过⻓时，回收内存回到中⼼缓存 
	void ListTooLong(FreeList& list, size_t size);
private:
	FreeList _freeLists[NFREELIST];//哈希表/哈希桶
};
//线程的局部存储(windows)	每个线程有一个独立的pTLSThreadCach，实现无锁访问线程内存池
static _declspec(thread) ThreadCache* pTLSThreadCache = nullptr;
//static保证只在当前文件可见